// import parseTime, formatTime and set to filter
export { parseTime, formatTime } from '@/utils'

/**
 * @param {number} time
 */
export function timeAgo(time) {
  const between = Date.now() / 1000 - Number(time)
  if (between < 3600) {
    return pluralize(~~(between / 60), ' minute')
  } else if (between < 86400) {
    return pluralize(~~(between / 3600), ' hour')
  } else {
    return pluralize(~~(between / 86400), ' day')
  }
}

/**
 * Number formatting
 * like 10000 => 10k
 * @param {number} num
 * @param {number} digits
 */
export function numberFormatter(num, digits) {
  const si = [
    { value: 1E18, symbol: 'E' },
    { value: 1E15, symbol: 'P' },
    { value: 1E12, symbol: 'T' },
    { value: 1E9, symbol: 'G' },
    { value: 1E6, symbol: 'M' },
    { value: 1E3, symbol: 'k' }
  ]
  for (let i = 0; i < si.length; i++) {
    if (num >= si[i].value) {
      return (num / si[i].value + 0.1).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
    }
  }
  return num.toString()
}

/**
 * 10000 => '10,000'
 * @param {number} num
 */
export function toThousandFilter(num) {
  return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}

/**
 * Upper cas?e first char
 * @param {String} string
 */
export function uppercaseFirst(string) {
  return string.charAt(0).toUpperCase() + string.slice(1)
}

/**
 * 默认值
 * @param string str 字符串
 * @param string defaults 默认值
 */
export function empty(str, defaults = '没有留下任何脚印') {
  if (!str) {
    return defaults
  }
  return str
}

/**
 * 过滤
 * @param Object arr 源数组
 * @param Array list 比较数组对象
 * @param String key 显示key
 */
export function object_filter(obj, list, key = 'name') {
  const result = list.find(item => Number(item.id) === Number(obj.id))
  if (result.length === 0) {
    return ''
  }
  return key ? result[0][key] : result[0]
}

/**
 * 过滤
 * @param {*} id 比较id
 * @param {*} arr 数组
 * @param {*} key 显示key
 */
export const array_filter = (id, arr = [], key = 'name') => {
  if (arr.length === 0) {
    return ''
  }
  const results = arr.find(item => Number(item.id) === Number(id))
  if (!results) {
    return ''
  }
  return key ? results[key] : ''
}

/**
 * 隐藏手机
 * @param string tel 手机号
 */
export function safe_mobi(tel = '') {
  return tel ? tel.substring(0, 3) + '****' + tel.substring(8, 11) : ''
}

/**
 * 获取主域名
 * @param String url 网址
 */
export function domain(url) {
  const host = url.replace(/^https?:\/\//, '').replace(/\/.*$/, '')
  const parts = host.split('.').slice(-3)
  if (parts[0] === 'www') parts.shift()
  return parts.join('.')
}

/**
 * 获取距离发布时间
 * @param {int} time 时间戳
 */
export function time_ago(time, t = 'zh') {
  const between = Date.now() / 1000 - Number(time)
  const lang = {
    zh: [
      '分钟',
      '小时',
      '天'
    ],
    en: [
      'minute',
      'hour',
      'day'
    ]
  }
  if (between < 3600) {
    return pluralize(~~(between / 60), lang[t][0], t)
  } else if (between < 86400) {
    return pluralize(~~(between / 3600), lang[t][1], t)
  } else {
    return pluralize(~~(between / 86400), lang[t][2], t)
  }
}
/**
 * 序列化时间
 * @param {*} time 时间
 * @param {*} label 标签
 * @param {*} t 语言
 */
function pluralize(time, label, t) {
  if (t === 'zh') {
    return time + label
  }
  if (time === 1) {
    return time + label
  }
  return time + label + 's'
}

/**
 * 截取指定长度支付
 * @param {*} str 截取字符串
 * @param {*} lng 截取长度
 * @param {*} flag 是否显示点
 */
export function split(str = '', lng = 15, flag = false) {
  let _str = ''
  if (!str) {
    _str = ''
  }
  if (str.length <= length) {
    _str = str
  }
  _str = flag ? str.substring(0, lng) + '...' : str.substring(0, lng)
  return _str
}
/**
 * 格式化时间戳日期
 * @param {*} tmp 时间戳
 * @param {*} empty 默认值
 * @param {*} fmt 格式
 */
export function date(tmp = 0, empty = '--', fmt = 'yyyy-MM-dd hh:mm:ss') {
  if (!tmp) return empty
  const now = new Date(tmp * 1000)
  const o = {
    'M+': now.getMonth() + 1, // 月份
    'd+': now.getDate(), // 日
    'h+': Number(now.getHours() % 12) === 0 ? 12 : now.getHours() % 12, // 小时
    'm+': now.getMinutes(), // 分
    's+': now.getSeconds(), // 秒
    'q+': Math.floor((now.getMonth() + 3) / 3), // 季度
    'S': now.getMilliseconds() // 毫秒
  }
  var week = {
    '0': '/u65e5',
    '1': '/u4e00',
    '2': '/u4e8c',
    '3': '/u4e09',
    '4': '/u56db',
    '5': '/u4e94',
    '6': '/u516d'
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (now.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  if (/(E+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '/u661f/u671f' : '/u5468') : '') + week[now.getDay() + ''])
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
  }
  return fmt
}
